﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Security.Cryptography;
using Sinacor.Infra.Common.Security.Cryptography;

namespace Sinacor.Infra.Core.Licensing
{
    public class LicensingGenerator
    {
        //Tamanho da chave que será gerada
        private const int KEY_SIZE = 1024;

        public LicensingGenerator()
        {

        }
        
        public SignedLicensing Generate(Licensing licensing)
        {
            // Objeto que contém a licença, a chave pública e a assinatura da licença
            SignedLicensing signedLicensing;

            // Objeto que receberá a chave pública e a assinatura da licença para retorno.
            DsaSigner.SignedData signedData;
            
            // Objeto que contém os dados da licença
            signedLicensing = new SignedLicensing();

            // Gera a assinatura e a chave pública da licença
            signedData = DsaSigner.Sign(Licensing.Serialize(licensing), KEY_SIZE);

            // Monta objeto de retorno com a licença
            signedLicensing.Licensing = licensing;
            signedLicensing.PublicKey = signedData.Key;
            signedLicensing.Signature = signedData.Signature;

            return signedLicensing;
        }
    }
}
